package Web;

import Request.Peticion;
import Request.PeticionFactory;
import Response.Respuesta;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;

/**
 *
 * @author Freddy Feria
 */
public class JsonServlet implements WebServlet {

    private PeticionFactory peticionFactory;

    public JsonServlet() {
        peticionFactory = new PeticionFactory();
    }

    @Override
    public void procesar(HttpServletRequest request, HttpServletResponse response) {
        response.setContentType("application/json");
        JSONObject requestJson;
        Map responseJson;
        try {
            StringBuilder sb = new StringBuilder();
            String s;
            while ((s = request.getReader().readLine()) != null) {
                sb.append(s);
            }
            requestJson = (JSONObject) (JSONValue.parse(sb.toString()));
            Peticion peticion = peticionFactory.getPeticion((String) requestJson.get("Tipo"));
            peticion.setId((Long) requestJson.get("id"));
            peticion.setParametros(((JSONArray) requestJson.get("Valores")).toArray());
            Respuesta respuesta = peticion.ejecutar();
            JSONArray listaParametros = new JSONArray();
            listaParametros.addAll(Arrays.asList(respuesta.getParametros()));
            responseJson = new LinkedHashMap();
            responseJson.put("id", respuesta.getId());
            responseJson.put("Tipo", respuesta.getTipo());
            responseJson.put("Valores", listaParametros);
            response.getOutputStream().print(JSONValue.toJSONString(responseJson));
            response.getOutputStream().flush();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
